Introduction to Time Series

\(\hspace{0.3cm}\) More articles: \(\hspace{0.1cm}\) Estadistica4all

\(\hspace{0.3cm}\) Author: \(\hspace{0.1cm}\) Fabio Scielzo Ortiz

\(\hspace{0.3cm}\) If you use this article, please quote it !!

\(\hspace{0.5cm}\) Scielzo Ortiz, F. (2023). Introduction to Time Series. http://estadistica4all.com/Articulos/Intervalos-de-confianza.html

It’s recommended to open the article on a computer or tablet.


1 Introduction to stochastic processes

1.1 Stochastic processes

Let \(\hspace{0.1cm}\mathcal{X}_t\hspace{0.1cm}\) be a random variable (r.v.), for each \(\hspace{0.1cm}t\in T\)

\(\hspace{0.25cm}\) A stochastic processes is a set of random variables \(\hspace{0.1cm}\left\lbrace \hspace{0.1cm} \mathcal{X}_t \hspace{0.1cm}:\hspace{0.1cm} t \in T \hspace{0.1cm}\right\rbrace\hspace{0.1cm}\) such that \(\hspace{0.1cm}\mathcal{X}_t \in S \subset \mathbb{R}\)

\(\hspace{0.25cm}\) where:

  • \(T\hspace{0.1cm}\) is called parameter space and is the set of indices of the random variables that define the stochastic process. \(\\[0.35cm]\)

  • \(S\hspace{0.1cm}\) is called states space and is the variation field of the random variables that define the stochastic process. \(\\[0.35cm]\)

  • We will say that \(\hspace{0.1cm}\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm} : \hspace{0.1cm} t \in T \hspace{0.1cm} \rbrace\hspace{0.15cm}\) is a stochastic process with parameter space \(\hspace{0.1cm}T\hspace{0.1cm}\) and states space \(\hspace{0.1cm}S\). \(\\[0.5cm]\)

Observation:

\(T\hspace{0.1cm}\) is generally interpreted as moments or periods of time, because one of the most important applications of stochastic processes is time series modeling.

Therefore:

\(X_t\hspace{0.1cm}\) is a random variable ussually used to model the state of a system at time moment \(\hspace{0.06cm}t\hspace{0.06cm}\), or to model a variable of interest at the moment or period \(\hspace{0.06cm}t\).


1.2 Discrete stochastic process

\(\hspace{0.25cm}\) \(\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}:\hspace{0.1cm} t \in T \hspace{0.1cm} \rbrace\hspace{0.15cm}\) is a discrete stochastic process if \(\hspace{0.15cm}T\subset \lbrace 0,1,2,... \rbrace\)


1.3 Continuous stochastic process

\(\hspace{0.25cm}\) \(\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}:\hspace{0.1cm} t \in T \hspace{0.1cm} \rbrace\hspace{0.15cm}\) is a continuous stochastic process if \(\hspace{0.15cm}T\subset [0, \infty)\)


1.4 Types of stochastic processes

1.4.1 Independent process

\(\hspace{0.25cm}\)\(\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}:\hspace{0.1cm} t \in T \hspace{0.1cm} \rbrace\hspace{0.1cm}\) is a independent stochastic process if the random variables that define the process are independent.


1.4.2 Markov process

\(\hspace{0.25cm}\) A discrete stochastic process \(\hspace{0.1cm}\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}/\hspace{0.1cm} t \in \lbrace 0,1,2,... \hspace{0.1cm} \rbrace\hspace{0.2cm}\) is a Markov process if: \(\\[0.15cm]\)

\[P(\mathcal{X}_{n+1} = x_{n+1}\hspace{0.15cm} |\hspace{0.15cm} \mathcal{X}_0 = x_0 ,..., \mathcal{X}_n =x_n) \hspace{0.1cm}=\hspace{0.1cm} P(\mathcal{X}_{n+1} = x_{n+1}\hspace{0.15cm} |\hspace{0.15cm} \mathcal{X}_n = x_n)\]

\(\hspace{0.25cm}\) where: \(\hspace{0.2cm} x_{t} \in S \hspace{0.2cm},\hspace{0.2cm} \forall\hspace{0.1cm} t \in \lbrace 0,1,...,n+1\rbrace\) \(\\[0.35cm]\)

This property is known as the memoryless Markov property. Because it implies that the future state of the system, \(\hspace{0.05cm}\mathcal{X}_{n+1}\hspace{0.05cm}\) , only depends on the present state \(x_n\) and does not depend on past states \(\hspace{0.05cm}x_0,...,x_{n- 1}\hspace{0.05cm}\).


1.4.3 Process of independent increments

\(\hspace{0.25cm}\) A continuous stochastic process \(\hspace{0.1cm}\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}/\hspace{0.1cm} t \geq 0 \rbrace\hspace{0.1cm}\) is a independent increments process if:

\(\hspace{0.25cm}\) For all set of times \(\hspace{0.1cm}t_1,t_2,t_3\geq 0\hspace{0.13cm}\) such that \(\hspace{0.1cm}t_1 < t_2 < t_3\)

\(\hspace{0.25cm}\) \(\mathcal{X}_{t_2} - \mathcal{X}_{t_1} \hspace{0.1cm}\) and \(\hspace{0.1cm} \mathcal{X}_{t_3} - \mathcal{X}_{t_2}\hspace{0.1cm}\) are independents.

This means that the displacements of the process in the time intervals \(\hspace{0.1cm}[t_1 , t_2) , [t_2 , t_3)\hspace{0.1cm}\) are independent of each other, for all \(\hspace{0.1cm }0 \leq t_1 < t_2 < t_3\).


1.4.4 Strictly stationary process

\(\hspace{0.25cm}\) A continuous stochastic process \(\hspace{0.1cm}\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}/\hspace{0.1cm} t \geq 0 \rbrace\hspace{0.2cm}\) is a strictly stationary process if:

\(\hspace{0.25cm}\) For all \(\hspace{0.05cm}t \geq 0\hspace{0.05cm}\) , the probability distribution of \(\hspace{0.05cm}\mathcal{X}_{t}\hspace{0.05cm}\) is the same as that of \(\hspace{0.05cm}\mathcal{X}_{t+h}\hspace{0.05cm}\) , for all \(\hspace{0.05cm}h>0\hspace{0.05cm}\).

Therefore, for all set of times \(\hspace{0.1cm}t_1 , t_2,...,t_n\) :

\(\hspace{0.2cm}(\mathcal{X}_{t_1}, \mathcal{X}_{t_2},\dots ,\mathcal{X}_{t_n} )\hspace{0.1cm}\) is identically distributed as \(\hspace{0.1cm}(\mathcal{X}_{t_1+h}, \mathcal{X}_{t_2+h},\dots ,\mathcal{X}_{t_n+h} )\)


1.4.5 Process with stationary increments

\(\hspace{0.25cm}\) A continuous stochastic process \(\hspace{0.1cm}\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}/\hspace{0.1cm} t \geq 0 \rbrace\hspace{0.1cm}\) is a process with stationary increments if:

\(\hspace{0.25cm}\) For all pair of times \(\hspace{0.1cm}t_1,t_2 > 0\hspace{0.1cm}\) such that \(\hspace{0.1cm}t_1 < t_2\)

\(\hspace{0.25cm}\) \(\mathcal{X}_{t_2} - \mathcal{X}_{t_1}\hspace{0.1cm}\) and \(\hspace{0.1cm}\mathcal{X}_{t_2 + h} - \mathcal{X}_{t_1 + h}\hspace{0.1cm}\) are independents, for any \(\hspace{0.1cm}h>0\)


1.4.6 Martingalas process

\(\hspace{0.25cm}\) A discrete stochastic process \(\hspace{0.1cm}\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}/\hspace{0.1cm} t \in \lbrace 0,1,2,... \hspace{0.1cm} \rbrace\hspace{0.1cm}\) is a Martingalas process if: \(\\[0.15cm]\)

\[E\left[\hspace{0.1cm}\mathcal{X}_{n+1} | X_0 = x_0 ,..., X_n = x_n\hspace{0.1cm} \right] \hspace{0.1cm} = \hspace{0.1cm} x_n\]

\(\hspace{0.25cm}\) where: \(\hspace{0.2cm} x_{t} \in S \hspace{0.2cm},\hspace{0.2cm} \forall\hspace{0.1cm} t \in \lbrace 0,1,...,n+1\rbrace\) \(\\[0.35cm]\)

This property is known as Martingalas property, and it implies that the expected value of the sistym in the future \(\hspace{0.1cm}n+1\hspace{0.1cm}\) is the value of the system in the present \(\hspace{0.1cm}x_n\). In mean the system doesn´t change of the state observed in the last moment.

This property is known as Martingale property, and it implies that the expected value of the sistym in the future \(\hspace{0.1cm}n+1\hspace{0.1cm}\) is the value of the system in the present \(\hspace {0.1cm}x_n\). So, in mean the system doesn´t change of the state observed in the last moment.


1.4.7 Levy process

\(\hspace{0.25cm}\) A continuous stochastic process \(\hspace{0.1cm}\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}/\hspace{0.1cm} t \geq 0 \rbrace\hspace{0.15cm}\) is a Levy process if is a process of independents and stationaries increments.

The Poisson and Brownian process are examples of Levy process.


1.4.8 Gaussian Process

\(\hspace{0.25cm}\) A continuous stochastic process \(\hspace{0.1cm}\lbrace \hspace{0.1cm} \mathcal{X}_t \in S \hspace{0.1cm}/\hspace{0.1cm} t \geq 0 \rbrace\hspace{0.15cm}\) is a Gaussian process if:

\(\hspace{0.25cm}\) For all set of times \(\hspace{0.1cm}t_1,...,t_n \geq 0\) : \(\\[0.12cm]\)

\[(\mathcal{X}_{t_1}, \mathcal{X}_{t_2},...,\mathcal{X}_{t_n}) \sim NM(\mu , \Sigma)\]

\(\hspace{0.25cm}\) where:

\(\hspace{0.3cm}\) \(NM(\mu , \Sigma)\hspace{0.1cm}\) denote the multivariate Normal probability distribution with mean vector \(\hspace{0.1cm}\mu\hspace{0.1cm}\) y covariance matrix \(\hspace{0.1cm}\Sigma\) . \(\\[0.2cm]\)

The dynamic phenomena that we observe in a time series can grouped into two classes:

  • The first are those that take stable values in time around a constant level, without showing a long term increasing or decreasing trend. These processes are called stationary.

Examples of those are the average yearly temperatures in a region or the propotion of births corresponding to males.

  • A second class of processes are the non-stationary processes, which are those that can show trend, seasonality and other evolutionary effects over time.

Examples of those are the yearly income of a country, company sales or energy demand. These are series that evolve over time with more or less stable trends.

In practice, the classification of a series as stationary or not depends on the period of observation, since the series can be stable in a short period and non-stationary in a longer one.


2 Time series

\(\hspace{0.2cm}\) Given a stochastic process \(\hspace{0.15cm} \mathcal{Y} \hspace{0.1cm}=\hspace{0.1cm} \Bigl( \hspace{0.06cm} \mathcal{Y}_t \hspace{0.12cm}: \hspace{0.12cm} t \in T=\lbrace 1,2,...,n \rbrace \hspace{0.06cm}\Bigl) \hspace{0.1cm} = \hspace{0.1cm}\Bigl( \hspace{0.06cm} \mathcal{Y}_1 , \mathcal{Y}_2 ,..., \mathcal{Y}_n \hspace{0.06cm}\Bigl) \hspace{0.1cm}\)

\(\hspace{0.25cm}\) Given a sample of one observation \(\hspace{0.08cm}y_t\hspace{0.08cm}\) of each random variable \(\hspace{0.08cm}\mathcal{Y}_t\hspace{0.08cm}\) of the process, for \(\hspace{0.06cm}t \in T=\lbrace 1,2,...,n \rbrace\hspace{0.06cm}\). \(\\[0.3cm]\)

  • \(\hspace{0.15cm} Y_t = \left( y_1, y_2, ...,y_n \right)^t \hspace{0.15cm}\) is a time series associated to the stochastic process \(\hspace{0.09cm}\mathcal{Y}\).

\(\hspace{0.25cm}\) where:

\(\hspace{0.35cm}\) \(y_t\hspace{0.06cm}\) could be interpreted as the value observed of the variable \(\hspace{0.06cm}\mathcal{Y}\hspace{0.06cm}\) at the time or period \(\hspace{0.06cm}t\). \(\\[0.15cm]\)

Observations:

  • \(y_t \in \mathbb{R}\hspace{0.08cm}\) is a realization of the random variable \(\\hspace{0.08cm}mathcal{Y}_t\) \(\\[0.35cm]\)

  • A time series is a realization of a stochastic process. The time series is considered a result or trajectory of the stochastic process. \(\\[0.35cm]\)

  • A time series can be defined as a vector of data points ordered in time. Where the data is equally spaced in time, namely, between each data point there is the same time space, such as a week, a month, a trimester, a quarter …

The process is characterized by the join probability distribution of the random variables \(\hspace{0.1cm} \mathcal{Y}_1 , \mathcal{Y}_2 ,..., \mathcal{Y}_k \hspace{0.1cm}\), namely, is characterized by the join density or probability function \(\hspace{0.08cm}f_{\hspace{0.08cm}\mathcal{Y}_1 , \mathcal{Y}_2 ,..., \mathcal{Y}_k}\).

This distribution is called finite-dimensional distribution of the process. We say that we know the probabilistic structure of the stochastic process when we know that join distribution, which determine the distribution of any subset of the variables and, in particular, the marginal distribution of each variable.


3 Mean function

Given a stochastic process \(\hspace{0.1cm} \Bigl\{ \hspace{0.05cm} \mathcal{X}_t \hspace{0.1cm}: \hspace{0.1cm} t \in T=\lbrace 1,2,...,k \rbrace \hspace{0.05cm} \Bigr\} \hspace{0.1cm}\)

The mean function $ _t $ of the process is defined as:

\[\mu_t = E\left[\mathcal{X}_t\right]\]

for \(\hspace{0.1cm} t \in \lbrace 1,2,...,k \rbrace \\\)

Observations:

  • An important particular case, due to its simplicity, arises when all the variables have the same mean and thus the mean function is a constant. The realizations of the process show no trend and we say that the process is stable in the mean. \(\\[0.35cm]\)

  • If, on the contrary, the means change over time, the observations at di erent moments will reveal that change. \(\\[0.35cm]\)

  • On many occasions we only have one realization of the stochastic process and we have to deduce from that whether the mean function of the process is, or is not, constant over time.


4 Variance function

Given a stochastic process \(\hspace{0.1cm}\left\lbrace \hspace{0.1cm} \mathcal{X}_t \hspace{0.1cm}/\hspace{0.1cm} t \in T=\lbrace 1,2,...,k \rbrace \hspace{0.1cm}\right\rbrace \hspace{0.1cm}\)

The variance function \(\sigma^2_t\) of the process is defined as:

\[\sigma^2_t = Var\left[\mathcal{X}_t\right]\]

for \(t \in \lbrace 1,2,...,k \rbrace \\\)

We say that the process is stable in the variance if the variability is constant over time.

A process can be stable in the mean but not in the variance and vice versa.


5 Autocovariance function

The structure of linear dependence between random variables is represented by the covariance and correlation functions.

Given a stochastic process \(\hspace{0.1cm}\left\lbrace \hspace{0.1cm} \mathcal{X}_t \hspace{0.1cm}/\hspace{0.1cm} t \in T=\lbrace 1,2,...,k \rbrace \hspace{0.1cm}\right\rbrace \hspace{0.1cm}\)

The autocavariance function \(\gamma_{t , t+h}\) of the process is defined as:

\[\gamma_{t , t+h} = Cov(\mathcal{X}_t , \mathcal{X}_{t+h}) = E\left[ (\mathcal{X}_t - \mu_t)\cdot (\mathcal{X}_{t+h} - \mu_{t+h}) \right]\]

for \(\hspace{0.1cm}t \in \lbrace 1,2,...,k \rbrace\hspace{0.1cm}\) and \(\hspace{0.1cm} h\in \lbrace 1,2,... \rbrace \\\)

In particular, we have

\[\gamma_{t , t} = \sigma_t^2\]

The autocovariances have dimensions, the squares of the series, thus it is not advisable to use them for comparing series measured in di erent units.


6 Autocorrelation function

Given a stochastic process \(\hspace{0.1cm}\left\lbrace \hspace{0.1cm} \mathcal{X}_t \hspace{0.1cm}/\hspace{0.1cm} t \in T=\lbrace 1,2,...,k \rbrace \hspace{0.1cm}\right\rbrace \hspace{0.1cm}\)

The autocorrelation function \(\rho_{t , t+h}\) of the process is defined as:

\[\rho_{t , t+h} = \dfrac{\gamma_{t , t+h}}{\sqrt{\sigma_t^2 \cdot \sigma_{t+h}^2}}\]

for \(\hspace{0.1cm}t \in \lbrace 1,2,...,k \rbrace\hspace{0.1cm}\) and \(\hspace{0.1cm} h\in \lbrace 1,2,... \rbrace \\\)

In particular, we have

\[\rho_{t , t} = 1\]


It is interesting to notice the differences between conditional distributions and the marginal distributions.

The marginal distribution of \(\mathcal{X}_t\) represents what we know about a variable, without knowing anything about its trajectory until time \(t\).

The conditional distribution of \(\mathcal{X}_t\) given \(\mathcal{X}_{t-1}\),…,\(\mathcal{X}_{t-r}\) represents what we know about a variable when we know the k previous values of the process.

In time series conditional distributions are of greater interest than marginal ones because they define the predictions that we can make about the future knowing the past.


7 Visualization of time series in Python

Throughout this article we will use a time series on sales of a company.

First of all, we load some of the libraries that we are to use:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme()

sns.set(rc={'figure.figsize':(20,9)})

We load the data-set:

Time_Series_1 = pd.read_csv('Time_Series_1.csv')
Time_Series_1
CODARTIC CODIREGG IMPLINEA IMPVENTA CODTAVEN QCANTDEC NUMTARJE
0 10254201003449 1 59.99 59.99 2022-06-21001069602336387 1.0 6.008330e+18
1 10234141001560 1 12.72 12.72 2021-08-03001002100821700 1.0 NaN
2 10865290000019 4 11.20 11.20 2022-08-21001009006714129 1.0 6.008330e+18
3 10004136025419 1 48.97 48.97 2022-07-09001003602372694 1.0 NaN
4 10073131011804 1 22.95 22.95 2022-05-14001091203649080 1.0 6.008330e+18
704350 10271412016641 1 18.90 18.90 2022-02-10001003601776985 1.0 NaN
704351 10411524000184 2 -29.99 -29.99 2022-06-02001009803937030 -1.0 NaN
704352 10092532091505 1 75.00 75.00 2022-05-19001003602477163 1.0 6.008330e+18
704353 10805731000015 2 -12.59 -10.70 2022-02-17001009008963198 -1.0 6.008330e+18
704354 10084472093096 1 6.95 6.95 2021-06-06001048902492799 1.0 NaN

704355 rows × 7 columns

The default periodicity of this time series is daily.

We can group a time series by different periods, as hours, days, weeks, months, quarter, years…

Concretely we will group this time series by day, week, month and quarter.

We can get date column as follows:

Time_Series_1['Fecha'] = Time_Series_1['CODTAVEN'].str[0:10]

We have to convert date column to date format:

Time_Series_1['Fecha'] = pd.to_datetime(Time_Series_1['Fecha'])

We can create the columns Day, Week, Month, Quarter and Year as follows:

Time_Series_1['Dia'] = Time_Series_1['Fecha'].dt.day

Time_Series_1['Semana'] = Time_Series_1['Fecha'].dt.week

Time_Series_1['Mes'] = Time_Series_1['Fecha'].dt.month

Time_Series_1['Trimestre'] = Time_Series_1['Fecha'].dt.quarter

Time_Series_1['Año'] = Time_Series_1['Fecha'].dt.year

We select the columns with which we are going to work. IMPVENTA will be the response variable, namely, the variable we want to predict.

Time_Series_1 = Time_Series_1.loc[: , ['Fecha', 'Dia', 'Semana', 'Mes', 'Trimestre', 'Año', 'IMPVENTA']]
Time_Series_1
Fecha Dia Semana Mes Trimestre Año IMPVENTA
0 2022-06-21 21 25 6 2 2022 59.99
1 2021-08-03 3 31 8 3 2021 12.72
2 2022-08-21 21 33 8 3 2022 11.20
3 2022-07-09 9 27 7 3 2022 48.97
4 2022-05-14 14 19 5 2 2022 22.95
704350 2022-02-10 10 6 2 1 2022 18.90
704351 2022-06-02 2 22 6 2 2022 -29.99
704352 2022-05-19 19 20 5 2 2022 75.00
704353 2022-02-17 17 7 2 1 2022 -10.70
704354 2021-06-06 6 22 6 2 2021 6.95

704355 rows × 7 columns


7.1 Visualization of Monthly Time Series

Monthly_Time_Series_1 = Time_Series_1.groupby(['Año', 'Mes'])['IMPVENTA'].sum().reset_index(drop=False)
Monthly_Time_Series_1
Año Mes IMPVENTA
0 2021 6 992891.50
1 2021 7 982142.75
2 2021 8 885289.16
3 2021 9 878563.14
4 2021 10 923552.45
5 2021 11 1527486.61
6 2021 12 1438722.72
7 2022 1 1910816.46
8 2022 2 1317501.34
9 2022 3 1524652.47
10 2022 4 2060509.71
11 2022 5 2316733.47
12 2022 6 2872219.23
13 2022 7 2731251.02
14 2022 8 1844222.02
15 2022 9 1068975.95
16 2022 10 895735.29
17 2022 11 1544511.61
18 2022 12 1272814.69

This step is necessary to create Month-Year column, which will be used to carry out the plot.

Monthly_Time_Series_1['Año'] = Monthly_Time_Series_1['Año'].astype('string')
Monthly_Time_Series_1['Mes'] = Monthly_Time_Series_1['Mes'].astype('string')

Monthly_Time_Series_1['Mes-Año'] = Monthly_Time_Series_1[['Mes', 'Año']].agg('-'.join, axis=1)
Monthly_Time_Series_1
Año Mes IMPVENTA Mes-Año
0 2021 6 992891.50 6-2021
1 2021 7 982142.75 7-2021
2 2021 8 885289.16 8-2021
3 2021 9 878563.14 9-2021
4 2021 10 923552.45 10-2021
5 2021 11 1527486.61 11-2021
6 2021 12 1438722.72 12-2021
7 2022 1 1910816.46 1-2022
8 2022 2 1317501.34 2-2022
9 2022 3 1524652.47 3-2022
10 2022 4 2060509.71 4-2022
11 2022 5 2316733.47 5-2022
12 2022 6 2872219.23 6-2022
13 2022 7 2731251.02 7-2022
14 2022 8 1844222.02 8-2022
15 2022 9 1068975.95 9-2022
16 2022 10 895735.29 10-2022
17 2022 11 1544511.61 11-2022
18 2022 12 1272814.69 12-2022

We create the plot:

fig, ax = plt.subplots()

p=sns.lineplot(x="Mes-Año", y="IMPVENTA", data=Monthly_Time_Series_1 , color='red')

plt.setp(p.get_xticklabels(), rotation=90)

plt.title("Monthly Time Series",  fontsize = 17)

fig.savefig('p1.jpg', format='jpg', dpi=1200)

plt.show()


7.2 Visualization of Daily Time Series

Daily_Time_Series_1 = Time_Series_1.groupby(['Año', 'Mes','Dia'])['IMPVENTA'].sum().reset_index(drop=False)
Daily_Time_Series_1
Año Mes Dia IMPVENTA
0 2021 6 1 26423.78
1 2021 6 2 18752.01
2 2021 6 3 22812.84
3 2021 6 4 107889.11
4 2021 6 5 136714.44
574 2022 12 27 64542.49
575 2022 12 28 59913.84
576 2022 12 29 53815.43
577 2022 12 30 52695.32
578 2022 12 31 39739.67

579 rows × 4 columns

Daily_Time_Series_1['Año'] = Daily_Time_Series_1['Año'].astype('string')
Daily_Time_Series_1['Mes'] = Daily_Time_Series_1['Mes'].astype('string')
Daily_Time_Series_1['Dia'] = Daily_Time_Series_1['Dia'].astype('string')

Daily_Time_Series_1['Dia-Mes-Año'] = Daily_Time_Series_1[['Dia', 'Mes', 'Año']].agg('-'.join, axis=1)
Daily_Time_Series_1
Año Mes Dia IMPVENTA Dia-Mes-Año
0 2021 6 1 26423.78 1-6-2021
1 2021 6 2 18752.01 2-6-2021
2 2021 6 3 22812.84 3-6-2021
3 2021 6 4 107889.11 4-6-2021
4 2021 6 5 136714.44 5-6-2021
574 2022 12 27 64542.49 27-12-2022
575 2022 12 28 59913.84 28-12-2022
576 2022 12 29 53815.43 29-12-2022
577 2022 12 30 52695.32 30-12-2022
578 2022 12 31 39739.67 31-12-2022

579 rows × 5 columns

fig, ax = plt.subplots()

p=sns.lineplot(x="Dia-Mes-Año", y="IMPVENTA", data=Daily_Time_Series_1 , color='red')

p.set_xticks(np.arange(0 , len(Daily_Time_Series_1) , 40))

plt.setp(p.get_xticklabels(), rotation=90)

plt.title("Daily Time Series", fontsize = 20)

fig.savefig('p2.jpg', format='jpg', dpi=1200)

plt.show()


7.3 Visualization of Weekly Time Series

Weekly_Time_Series_1 = Time_Series_1.groupby(['Año', 'Mes','Semana'])['IMPVENTA'].sum().reset_index(drop=False)
Weekly_Time_Series_1['Año'] = Weekly_Time_Series_1['Año'].astype('string')
Weekly_Time_Series_1['Mes'] = Weekly_Time_Series_1['Mes'].astype('string')
Weekly_Time_Series_1['Semana'] = Weekly_Time_Series_1['Semana'].astype('string')

Weekly_Time_Series_1['Semana-Mes-Año'] = Weekly_Time_Series_1[['Semana', 'Mes', 'Año']].agg('-'.join, axis=1)
fig, ax = plt.subplots()

p=sns.lineplot(x="Semana-Mes-Año", y="IMPVENTA", data=Weekly_Time_Series_1 , color='red')

p.set_xticks(np.arange(0 , len(Weekly_Time_Series_1) , 5))

plt.setp(p.get_xticklabels(), rotation=90)

plt.title("Weekly Time Series",  fontsize = 17)

fig.savefig('p3.jpg', format='jpg', dpi=1200)

plt.show()


7.4 Visualization of Quarter Time Series

Quarter_Time_Series_1 = Time_Series_1.groupby(['Año', 'Trimestre'])['IMPVENTA'].sum().reset_index(drop=False)
Quarter_Time_Series_1
Año Trimestre IMPVENTA
0 2021 2 992891.50
1 2021 3 2745995.05
2 2021 4 3889761.78
3 2022 1 4752970.27
4 2022 2 7249462.41
5 2022 3 5644448.99
6 2022 4 3713061.59
Quarter_Time_Series_1['Año'] = Quarter_Time_Series_1['Año'].astype('string')
Quarter_Time_Series_1['Trimestre'] = Quarter_Time_Series_1['Trimestre'].astype('string')

Quarter_Time_Series_1['Trimestre-Año'] = Quarter_Time_Series_1[['Trimestre', 'Año']].agg('-'.join, axis=1)
fig, ax = plt.subplots()

p=sns.lineplot(x="Trimestre-Año", y="IMPVENTA", data=Quarter_Time_Series_1 , color='red')

p.set_xticks(np.arange(0 , len(Quarter_Time_Series_1) , 1))

plt.setp(p.get_xticklabels(), rotation=90)

plt.title("Quarter Time Series",  fontsize = 17)

fig.savefig('p4.jpg', format='jpg', dpi=1200)

plt.show()


7.5 Visualization of Yearly Time Series


8 Time Series Descomposition

Time series decomposition is a process by which we separate a time series into its components: trend, seasonality and residuals.

  • Trend represents the slow-moving changes in a time series. \(\\[0.25cm]\)

  • Seasonality represent the seasonal pattern in the series. The cycles occur repeatedly over a fixed period of time. \(\\[0.25cm]\)

  • Residuals represent the behavior that cannot be explained by the trend and seasonality components. \(\\[0.25cm]\)


9 Time Series Forecasting

\(\hspace{0.25cm}\) Given a stochastic process \(\hspace{0.15cm} \mathcal{Y} \hspace{0.1cm}=\hspace{0.1cm} \Bigl( \hspace{0.06cm} \mathcal{Y}_t \hspace{0.12cm}: \hspace{0.12cm} t \in T=\lbrace 1,2,...,n \rbrace \hspace{0.06cm}\Bigl) \hspace{0.1cm} = \hspace{0.1cm}\Bigl( \hspace{0.06cm} \mathcal{Y}_1 , \mathcal{Y}_2 ,..., \mathcal{Y}_n \hspace{0.06cm}\Bigl) \hspace{0.1cm}\)

\(\hspace{0.25cm}\) We have a time series \(\hspace{0.07cm}Y_t = \left( y_1, y_2, ...,y_n \right)^t \hspace{0.1cm}\) associated to the process \(\hspace{0.07cm}\mathcal{Y}\hspace{0.07cm}\).

So, \(\hspace{0.07cm}y_t\hspace{0.07cm}\) is the value of the process \(\hspace{0.07cm}\mathcal{Y}\hspace{0.07cm}\) in the period \(\hspace{0.07cm}t\).

Our goal is to predict the future of the process. For that we will use the information on the process given by the time series, namely, using the available data.

We want to predict \(\hspace{0.07cm}y_{n+k}\hspace{0.07cm}\), for \(\hspace{0.07cm}k=1,2,3,\dots\).

The idea under most part of forecasting methods is to predict \(\hspace{0.07cm}y_{n+k}\hspace{0.07cm}\) as:

\(\widehat{y}_{n+k} \hspace{0.07cm}=\hspace{0.07cm} \widehat{g}(y_1, y_2, ...,y_n)\)

Observations:

  • We are assuming that unique available data is \(\hspace{0.07cm}Y_t = \left( y_1, y_2, ...,y_n \right)^t \hspace{0.1cm}\) \(\\[0.2cm]\)

  • If \(\hspace{0.07cm}y_n\hspace{0.07cm}\) is the value of the process \(\hspace{0.07cm}\mathcal{Y}\hspace{0.07cm}\) corresponding to most recent period, \(\hspace{0.07cm}y_{n+k}\hspace{0.07cm}\) is the value of the process in a future period. So, by definition, we don’t know \(\hspace{0.07cm}y_{n+k}\hspace{0.07cm}\), for \(\hspace{0.07cm}k=1,2,3,\dots\).


10 Regression Problem vs Time Series Forecasting

You probably have encountered regression problems where you must predict some continuous target given a certain set of features. At first glance, time series forecasting seems like a typical regression problem: we have some historical data, and we wish to build a mathematical expression that will express future values as a function of past values. However, there are some key differences between time series forecasting and regression for time-independent scenarios that deserve to be addressed before we look at our very first forecasting technique.

  • Time series have an order

    The first concept to keep in mind is that time series have an order, and we cannot change that order when modeling. In time series forecasting, we express future values as a function of past values. Therefore, we must keep the data in order, so as to not violate this relationship.

    Other regression tasks in machine learning often do not have an order. For example, if you are tasked to predict revenue based on ad spend, it does not matter when a certain amount was spent on ads. Instead, you simply want to relate the amount of ad spend to the revenue. In fact, you might even randomly shuffle the data to make your model more robust. Here the regression task is to simply derive a function such that given an amount on ad spend, an estimate of revenue is returned. On the other hand, time series are indexed by time, and that order must be kept.

  • Time series sometimes do not have features

    It is possible to forecast time series without the use of features other than the time series itself. As data scientists, we are used to having datasets with many columns, each representing a potential predictor for our target. For example, consider the task of predicting revenue based on ad spend, where the revenue is the target variable. As features, we could have the amount spent on Google ads, Facebook ads, and television ads. Using these three features, we would build a regression model to estimate revenue. However, with time series, it is quite common to be given a simple dataset with a time column and a value at that point in time. Without any other features, we must learn ways of using past values of the time series to forecast future values. This is when the moving average model or autoregressive model come into play, as they are ways to express future values as a function of past values


11 Baseline Models


12 Stationary processes

ver tbn lo de Maria dolores

Given a stochastic process \(\hspace{0.1cm}\left\lbrace \hspace{0.1cm} \mathcal{X}_t \hspace{0.1cm}/\hspace{0.1cm} t \in T=\lbrace 1,2,...,k \rbrace \hspace{0.1cm}\right\rbrace \hspace{0.1cm}\)

A stochastic process is strictly stationary if:

the probability distribution of \(\mathcal{X}_{t}\) is the same as that of \(\mathcal{X}_{t+h}\)

for all \(\hspace{0.1cm}t \in \lbrace 1,2,...,k \rbrace\hspace{0.1cm}\) and \(\hspace{0.1cm} h \in \in \lbrace 1,2,... \rbrace\).

Therefore, for all set of times \(\hspace{0.1cm}t_1 , t_2,...,t_n\)

\((\mathcal{X}_{t_1}, \mathcal{X}_{t_2},\dots ,\mathcal{X}_{t_n} )\hspace{0.1cm}\) is identically distributed as \(\hspace{0.1cm}(\mathcal{X}_{t_1+h}, \mathcal{X}_{t_2+h},\dots ,\mathcal{X}_{t_n+h} )\)


Strict stationarity is a very strong condition, since to prove it we must have the joint distributions for any set of variables in the process. A weaker property, but one which is easier to prove, is weak stationarity.

A stochastic process is weakly stationary if:

  • \(\mu_t = \mu = cte , \forall t \in \lbrace 1,2,...,k \rbrace\)

  • \(\sigma_t^2 = \sigma = cte , , \forall t \in \lbrace 1,2,...,k \rbrace\)

  • \(\gamma_{t , t + h} = Cov(\mathcal{X}_t,\mathcal{X}_{t+h}) E[(\mathcal{X}_t - \mu)\cdot (\mathcal{X}_{t+h} - \mu)] = \gamma(h) , \forall h \in \lbrace 0 , \pm 1 , \pm 2 ,... \rbrace\)

The first two conditions indicate that the mean and variance are constant.

The third indicates that the covariance between two variables depends only on their separation.

In a stationary process the autocovariances and autocorrelations depend only on the lag between the variables and, in particular, the relationship between \(\mathcal{X}_t\) and \(\mathcal{X}_{t+h}\) , is always equal to the relationship between \(\mathcal{X}_t\) and \(\mathcal{X}_{t-h}\) .

As a result, in stationary processes:

\(\gamma_{t , t + h} = \gamma_{t + r , t + h + r} = \gamma(h) , \forall r \in \lbrace 0 , \pm 1 , \pm 2 ,... \rbrace\)

\[\rho_{t, t+h} = \dfrac{\gamma_{t , t + h}}{\sqrt{\sigma_t^2 \cdot \sigma_{t+h}^2}} = \dfrac{\gamma(h)}{\sqrt{\sigma^2 \cdot \sigma^2}} = \dfrac{\gamma(h)}{\sigma^2} = \dfrac{\gamma(h)}{\gamma(0)} = \rho(h)\]

Where:

\(\gamma(0) = \sigma^2\)


13 White Noise Process


14 Transformation to get stationarity

ver tbn lo de Maria dolores


15 Testing for stationarity

ver tbn lo de Maria dolores

Dickey-fuller test

Aumented Dickey Fuller test


16 Random walk

\(\hspace{0.25cm}\) A random walk is a stochastic process \(\hspace{0.1cm}\Bigl\{ \hspace{0.1cm} \mathcal{X}_t \hspace{0.1cm}:\hspace{0.1cm} t \in T=\lbrace 1,2,...,n \rbrace \hspace{0.1cm}\Bigl\} \hspace{0.1cm}\) defined as:

  • \(\mathcal{X}_t = \mathcal{X}_{t-1} + a_t\) , for \(t \in \lbrace 1,...,n \rbrace\)

\(\hspace{0.25cm}\) where:

  • \(\mathcal{X}_0 = 0\) \(\\[0.25cm]\)

  • \(a_t \sim N(0, \sigma^2)\) \(\\[0.25cm]\)


16.1 Aplicar los conceptos dediferencia en parte regular y test de ddickey fuller al random walk


17 Moving Average Process: MA

Para un modelo MA(1), la función de verosimilitud toma la forma:

\[\mathcal{L}(\theta_1, \sigma^2) = \prod_{t=1}^T \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_t - \theta_1 \epsilon_{t-1})^2}{2\sigma^2}\right)\]

donde \(\epsilon_t\) es un término de error gaussiano con media cero y varianza \(\sigma^2\), y \(\theta_1\) es un parámetro del modelo. Nuevamente, la función de log-verosimilitud es:

\[\ell(\theta_1, \sigma^2) = -\frac{T}{2} \ln(2\pi) - \frac{T}{2} \ln(\sigma^2) - \frac{1}{2\sigma^2} \sum_{t=1}^T (y_t - \theta_1 \epsilon_{t-1})^2\]

El objetivo es encontrar los valores de los parámetros \(\theta_1\) y \(\sigma^2\) que maximizan la función de log-verosimilitud. Al igual que en los casos anteriores, se puede utilizar el método de Máxima Verosimilitud para estimar los parámetros, encontrando los valores de \(\theta_1\) y \(\sigma^2\) que maximizan \(\ell(\theta_1, \sigma^2)\). Esto también se puede lograr mediante métodos numéricos como el método de Newton-Raphson o el método de gradiente descendente.


Para un modelo MA(q), la función de verosimilitud toma la forma:

\[\mathcal{L}(\theta_1, \ldots, \theta_q, \sigma^2) = \prod_{t=q+1}^T \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_t - \sum_{i=1}^q \theta_i \epsilon_{t-i})^2}{2\sigma^2}\right)\]

donde \(\epsilon_t\) es un término de error gaussiano con media cero y varianza \(\sigma^2\), y \(\theta_1, \ldots, \theta_q\) son parámetros del modelo. Nuevamente, la función de log-verosimilitud es:

\[\ell(\theta_1, \ldots, \theta_q, \sigma^2) = -\frac{T-q}{2} \ln(2\pi) - \frac{T-q}{2} \ln(\sigma^2) - \frac{1}{2\sigma^2} \sum_{t=q+1}^T (y_t - \sum_{i=1}^q \theta_i \epsilon_{t-i})^2\]

El objetivo es encontrar los valores de los parámetros \(\theta_1, \ldots, \theta_q\) y \(\sigma^2\) que maximizan la función de log-verosimilitud. Al igual que en los casos anteriores, se puede utilizar el método de Máxima Verosimilitud para estimar los parámetros, encontrando los valores de \(\theta_1, \ldots, \theta_q\) y \(\sigma^2\) que maximizan \(\ell(\theta_1, \ldots, \theta_q, \sigma^2)\). Esto también se puede lograr mediante métodos numéricos como el método de Newton-Raphson o el método de gradiente descendente.

18 Autorregresive Process: AR

Para estimar los parámetros de un modelo AR(1), se puede utilizar el método de Máxima Verosimilitud. Dado un conjunto de datos \(y_t\) para \(t=1,\ldots,T\) y un modelo AR(1) dado por:

\[ y_t = \phi_1 y_{t-1} + \epsilon_t \]

donde \(\epsilon_t \sim N(0,\sigma^2)\) es un término de error gaussiano con media cero y varianza \(\sigma^2\), se busca encontrar los valores de los parámetros \(\phi_1\) y \(\sigma^2\) que maximizan la función de verosimilitud:

\[ \mathcal{L}(\phi_1, \sigma^2) = \prod_{t=2}^T \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_t - \phi_1 y_{t-1})^2}{2\sigma^2}\right) \]

La función de log-verosimilitud es entonces:

\[ \ell(\phi_1, \sigma^2) = -\frac{T-1}{2} \ln(2\pi) - \frac{T-1}{2} \ln(\sigma^2) - \frac{1}{2\sigma^2} \sum_{t=2}^T (y_t - \phi_1 y_{t-1})^2 \]

La estimación de los parámetros se realiza maximizando la función de log-verosimilitud, es decir, encontrando los valores de \(\phi_1\) y \(\sigma^2\) que hacen que \(\ell(\phi_1, \sigma^2)\) sea lo más grande posible. Esto se puede hacer de varias maneras, por ejemplo, mediante métodos numéricos como el método de Newton-Raphson o el método de gradiente descendente.


¡Por supuesto! Para un modelo AR(p), la función de verosimilitud toma la forma:

\[\mathcal{L}(\boldsymbol{\phi}, \sigma^2) = \prod_{t=p+1}^T \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_t - \sum_{i=1}^p \phi_i y_{t-i})^2}{2\sigma^2}\right)\]

donde \(\boldsymbol{\phi} = (\phi_1, \ldots, \phi_p)\) es un vector de parámetros, y \(y_t\) es una serie de tiempo para \(t=1, \ldots, T\). De nuevo, la función de log-verosimilitud es:

\[ \ell(\boldsymbol{\phi}, \sigma^2) = -\frac{T-p}{2} \ln(2\pi) - \frac{T-p}{2} \ln(\sigma^2) - \frac{1}{2\sigma^2} \sum_{t=p+1}^T (y_t - \sum_{i=1}^p \phi_i y_{t-i})^2 \]

El objetivo es encontrar los valores de los parámetros \(\boldsymbol{\phi}\) y \(\sigma^2\) que maximizan la función de log-verosimilitud. Al igual que en el caso AR(1), se puede utilizar el método de Máxima Verosimilitud para estimar los parámetros, encontrando los valores de \(\boldsymbol{\phi}\) y \(\sigma^2\) que maximizan \(\ell(\boldsymbol{\phi}, \sigma^2)\). Esto también se puede lograr mediante métodos numéricos como el método de Newton-Raphson o el método de gradiente descendente.